% Назначение: Кодер TCM
% Вход: msg       - кодируемое сообщение
%       trel      - структура описывающая таблицу переходов используемого
%                   сверточного кода
%       signals   - множество сигнальных точек модуляции
%       initstate - предшествующее состояние кодера
% Выход: point      - сигнальная точка модуляции
%        finalstate - конечное состояние кодера
% Обращение: [point, finalstate] = tcmEncoder(msg, trel, signals, initstate)
function [point, finalstate] = tcmEncoder(msg, trel, signals, initstate)
% Кодирование
if isempty(initstate)
    s = 1;
else
    s = initstate + 1;
end

m          = bi2de(msg', 'left-msb');
finalstate = trel.nextStates(s, m + 1);
i          = trel.outputs(s, m + 1);

% Модуляция
point = signals( :, i + 1 );
end

